#ifndef NEBESKO_TELO_H__
#define NEBESKO_TELO_H__

#include "Tekstura.h"

class NebeskoTelo
{
protected:
      Tekstura    *tekstura;
      float       poluprecnik;
      float       ugao_revolucije;
      float       brzina_revolucije;
	  float       ugao_rotacije;
	  float       brzina_rotacije;
      float       poluprecnik_revolucije;

      NebeskoTelo **sateliti;
      int         broj_satelita;
      int         max_satelita;

      static void crtajSferu(float radius, int br_segmenata);
      virtual void crtajTelo() = 0;

public:
      NebeskoTelo( float arg_poluprecnik, 
                   float arg_brzina_revolucije,
				   float arg_brzina_rotacije,
                   float arg_poluprecnik_revolucije,
                   Tekstura *t = 0)
      : poluprecnik(arg_poluprecnik), 
	  ugao_revolucije(0), brzina_revolucije(arg_brzina_revolucije), brzina_rotacije(arg_brzina_rotacije),
        poluprecnik_revolucije(arg_poluprecnik_revolucije),
        tekstura(t), sateliti(0)
      {
      }

      virtual ~NebeskoTelo()
      {
            if( tekstura )
                  delete tekstura;

            for(int i = 0; i < broj_satelita; i++)
                  delete sateliti[i];
            delete []sateliti;
      }

      void postaviTeksturu(Tekstura *t)
      {
            if( tekstura )
                  delete tekstura;
            tekstura = t;
      }

      void rezervisiSatelite(int arg_broj_satelita);
      bool dodajSatelit(NebeskoTelo *p);

      virtual void crtaj();

      void pomeri(int proteklo_vreme);
};

class Zvezda : public NebeskoTelo
{
protected:
      virtual void crtajTelo();
public:
	Zvezda(float arg_poluprecnik, float arg_brzina_rotacije, Tekstura *t = 0)
		: NebeskoTelo(arg_poluprecnik, 0, arg_brzina_rotacije,0, t)
      {
      }

};

class Planeta : public NebeskoTelo
{
protected:
      virtual void crtajTelo();
public:
      Planeta(float arg_poluprecnik, 
              float arg_brzina_revolucije,
			  float arg_brzina_rotacije,
              float arg_poluprecnik_revolucije, 
              Tekstura *t = 0)
			  : NebeskoTelo(arg_poluprecnik, arg_brzina_revolucije, arg_brzina_rotacije, arg_poluprecnik_revolucije, t)
      {
      }
};

#endif